<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <link rel="canonical" href="https://jamesfengcao.gitlab.io/uweb/zh/bookmarklet/" />
    
    <link rel="stylesheet" href="../style.css#" type="text/css" />
    <title>小书签</title>
    <script>
      function findLang(){
        let href = location.href;
        for(let i=href.length-1;i>0;i--){
          if('/'==href.charAt(i) && '/'==href.charAt(i-3))
            return i;
        }
        return 0;
      }
      function nav2(page){
        let i = findLang();
        location.href = location.href.substring(0,i+1)+page;
      }
      function nav2Lang(lang){
        let i = findLang();
        let href = location.href;
        location.href = location.href.substring(0,i-2)+lang+location.href.substring(i);
      }
    </script>
  </head>
  <body>
    <header class='header'>
      <a class="logo" href="javascript:void(0)" onclick="return nav2('index.html#')">首页</a> <a class="logo" href="javascript:void(0)" onclick="return nav2('tags/index.html#')">标签</a>
      
        
          <a class="logo" href="javascript:void(0)" onclick="return nav2Lang('en')">English</a>
        
      
      <nav>
      </nav>
    </header>
    <br />
    
<div class="container">
  <h1 class="title">小书签
    <br>
    <span class="subtitle"></span>
  </h1>
  <ul class="tags">
    
    <li><a href="../tags/javascript/index.html#">javascript</a> </li>
    
  </ul>
  <p><a href="../index.html#">超微浏览器</a>支持直接运行远程网址上的小书签(Bookmarklet)，将本页面或其它包含小书签网址加入书签。使用时只需长按小书签链接，点击“新窗口打开”，小书签将作用于超微浏览器最后一个窗口（非小书签窗口）页面上。</p>
<p><a href="javascript:{let es=document.getElementsByTagName('script');let urls='';for(let i=0;i<es.length;i++){if(es[i].src)urls+=es[i].src+'<br>';}let w=window.open(''),s=w.document;s.write(urls);s.close();w.location.href='i:631:';}">列出外部脚本</a></p>
<p><a target="_self" href="javascript:alert(navigator.userAgent)">查看浏览器UA</a><br>
<a href="javascript:(function(){var w=window.open(''),s=w.document;s.write('<html><body></body></html>');s.close();var pre=s.body.appendChild(s.createElement('pre'));pre.style.overflow='auto';pre.style.whiteSpace='pre-wrap';pre.appendChild(s.createTextNode(document.cookie))})()">网页cookie</a><br>
<a href="javascript:(function(){var w=window.open(''),s=w.document;s.write('<html><body></body></html>');s.close();var pre=s.body.appendChild(s.createElement('pre'));pre.style.overflow='auto';pre.style.whiteSpace='pre-wrap';pre.appendChild(s.createTextNode(document.documentElement.innerHTML))})()">网页源码</a><br>
<a href="javascript:function%20gett(w){try{var%20lm=new%20Date(w.document.lastModified);if(lm>maxd)maxd=lm;for(var%20i=0;F=w.frames[i];i++){gett(F);}}catch(e){}}var%20now=new%20Date();var%20maxd=new%20Date(document.lastModified);gett(window);if(maxd.getTime()==0||now.toUTCString()==maxd.toUTCString()){alert('Page%20is%20dynamically%20generated,%20cannot%20determine%20date.');}else{alert('Page%20was%20last%20modified%20'+maxd.toLocaleString());}" class="bookmarklet" rel="nofollow">显示网页最后更改时间</a></p>
<p><a href="javascript:(function(){var script=document.createElement('script');script.src='//fastly.jsdelivr.net/npm/eruda';document.body.appendChild(script);script.onload=function(){eruda.init()}})()">Eruda: mobile console</a><br>
<a href="javascript:window.open('https://api.qrserver.com/v1/create-qr-code/?size=150x150&data='%20+%20decodeURIComponent(location.href));void(0);">生成二维码</a></p>
<p><a href="javascript:(function(){var x,i; x = document.forms; for (i = 0; i &lt; x.length; ++i) x[i].method=&quot;get&quot;; alert(&quot;Changed &quot; + x.length + &quot; forms to use the GET method.  After submitting a form from this page, you should be able to bookmark the result.&quot;); })();">POST转GET</a><br>
<a href="javascript:(function(){var i,f,j,e,div,label,ne; for(i=0;f=document.forms[i];++i)for(j=0;e=f[j];++j)if(e.type==&quot;hidden&quot;){ D=document; function C(t){return D.createElement(t);} function A(a,b){a.appendChild(b);} div=C(&quot;div&quot;); label=C(&quot;label&quot;); A(div, label); A(label, D.createTextNode(e.name + &quot;: &quot;)); e.parentNode.insertBefore(div, e); e.parentNode.removeChild(e); ne=C(&quot;input&quot;);/*for ie*/ ne.type=&quot;text&quot;; ne.value=e.value; A(label, ne); --j;}})()">Shows all form elements</a><br>
<a href="javascript:(function(){var x,k,f,j;x=document.forms;for (k=0;k&lt;x.length;++k){f=x[k];for(j=0;j&lt;f.length;++j){f[j].disabled=false; f[j].readOnly=false;}}})()">Enables all form elements</a></p>
<p><a href="javascript:(function(){function toggle(box){temp=box.onchange;box.onchange=null;box.checked=!box.checked;box.onchange=temp;}var f=document.querySelectorAll(%22input[type='checkbox']%22);var j;for(j=0;j<f.length;++j)toggle(f[j]);})()">切换复选框状态</a><br>
<a href="javascript:(function(){function set(box,bChecked){temp=box.onchange;box.onchange=null;box.checked=bChecked;box.onchange=temp;}var f=document.querySelectorAll(%22input[type='checkbox']%22);var j;for(j=0;j<f.length;++j)set(f[j],true);})()">全选复选框</a><br>
<a href="javascript:(function(){function set(box,bChecked){temp=box.onchange;box.onchange=null;box.checked=bChecked;box.onchange=temp;}var f=document.querySelectorAll(%22input[type='checkbox']%22);var j;for(j=0;j<f.length;++j)set(f[j],false);})()">复选框全不选</a><br>
<a href="javascript:(function(){ function toggle(box){ temp=box.onchange; box.onchange=null; box.checked=!box.checked; box.onchange=temp; } var x,k,f,j; x=document.forms; for (k=0; k<x.length; ++k) { f=x[k]; for (j=0;j<f.length;++j) if (f[j].type.toLowerCase() == &quot;checkbox&quot;) toggle(f[j]); } })();">切换表内复选框状态</a><br>
<a href="javascript:(function(){var%20doc=document;var%20bd=doc.body;bd.onselectstart=bd.oncopy=bd.onpaste=bd.onkeydown=bd.oncontextmenu=bd.onmousemove=bd.onselectstart=bd.ondragstart=doc.onselectstart=doc.oncopy=doc.onpaste=doc.onkeydown=doc.oncontextmenu=null;doc.onselectstart=doc.oncontextmenu=doc.onmousedown=doc.onkeydown=null;void(0)})()">解除选择复制限制（无效时可设UA为PC）</a><br>
<a href="javascript:(function() { function R(a){ona = &quot;on&quot;+a; if(window.addEventListener) window.addEventListener(a, function (e) { for(var n=e.originalTarget; n; n=n.parentNode) n[ona]=null; }, true); window[ona]=null; document[ona]=null; if(document.body) document.body[ona]=null; } R(&quot;contextmenu&quot;); R(&quot;click&quot;); R(&quot;mousedown&quot;); R(&quot;mouseup&quot;); })()">恢复长按菜单</a><br>
<a href="javascript:(function(){var count=0, text, regexp;text=prompt(&quot;Search regexp:&quot;, &quot;&quot;);if(text==null || text.length==0)return;try{regexp=new RegExp(&quot;(&quot; + text +&quot;)&quot;, &quot;i&quot;);}catch(er){alert(&quot;Unable to create regular expression using text '&quot;+text+&quot;'.\n\n&quot;+er);return;}function searchWithinNode(node, re){var pos, skip, spannode, middlebit, endbit, middleclone;skip=0;if( node.nodeType==3 ){pos=node.data.search(re);if(pos>=0){spannode=document.createElement(&quot;SPAN&quot;);spannode.style.backgroundColor=&quot;yellow&quot;;middlebit=node.splitText(pos);endbit=middlebit.splitText(RegExp.$1.length);middleclone=middlebit.cloneNode(true);spannode.appendChild(middleclone);middlebit.parentNode.replaceChild(spannode,middlebit);++count;skip=1;}}else if( node.nodeType==1 &amp;&amp; node.childNodes &amp;&amp; node.tagName.toUpperCase()!=&quot;SCRIPT&quot; &amp;&amp; node.tagName.toUpperCase!=&quot;STYLE&quot;){for (var child=0; child < node.childNodes.length; ++child){child=child+searchWithinNode(node.childNodes[child], re);}}return skip;}window.status=&quot;Searching for &quot;+regexp+&quot;...&quot;;searchWithinNode(document.body, regexp);window.status=&quot;Found &quot;+count+&quot; match&quot;+(count==1?&quot;&quot;:&quot;es&quot;)+&quot; for &quot;+regexp+&quot;.&quot;;})();">正则搜索</a><br>
<a href="javascript:function toArray (c){var a, k;a=new Array;for (k=0; k<c.length; ++k)a[k]=c[k];return a;}function insAtTop(par,child){if(par.childNodes.length) par.insertBefore(child, par.childNodes[0]);else par.appendChild(child);}function countCols(tab){var nCols, i;nCols=0;for(i=0;i<tab.rows.length;++i)if(tab.rows[i].cells.length>nCols)nCols=tab.rows[i].cells.length;return nCols;}function makeHeaderLink(tableNo, colNo, ord){var link;link=document.createElement('a');link.href='javascript:sortTable('+tableNo+','+colNo+','+ord+');';link.appendChild(document.createTextNode((ord>0)?'a':'d'));return link;}function makeHeader(tableNo,nCols){var header, headerCell, i;header=document.createElement('tr');for(i=0;i<nCols;++i){headerCell=document.createElement('td');headerCell.appendChild(makeHeaderLink(tableNo,i,1));headerCell.appendChild(document.createTextNode('/'));headerCell.appendChild(makeHeaderLink(tableNo,i,-1));header.appendChild(headerCell);}return header;}g_tables=toArray(document.getElementsByTagName('table'));if(!g_tables.length) alert(&quot;This page doesn't contain any tables.&quot;);(function(){var j, thead;for(j=0;j<g_tables.length;++j){thead=g_tables[j].createTHead();insAtTop(thead, makeHeader(j,countCols(g_tables[j])))}}) ();function compareRows(a,b){if(a.sortKey==b.sortKey)return 0;return (a.sortKey < b.sortKey) ? g_order : -g_order;}function sortTable(tableNo, colNo, ord){var table, rows, nR, bs, i, j, temp;g_order=ord;g_colNo=colNo;table=g_tables[tableNo];rows=new Array();nR=0;bs=table.tBodies;for(i=0; i<bs.length; ++i)for(j=0; j<bs[i].rows.length; ++j){rows[nR]=bs[i].rows[j];temp=rows[nR].cells[g_colNo];if(temp) rows[nR].sortKey=temp.innerHTML;else rows[nR].sortKey=&quot;&quot;;++nR;}rows.sort(compareRows);for (i=0; i < rows.length; ++i)insAtTop(table.tBodies[0], rows[i]);}">表格排序</a></p>
<p><a href="javascript: (function() { var url = ('http://www.bugmenot.com/view/' + escape(location.hostname)); w = open(url, 'w', 'location=no,status=yes,menubar=no,scrollbars=yes,resizable=yes,width=500,height=400,modal=yes,dependent=yes'); if (w) { setTimeout('w.focus()', 1000) } else { location = url } })();">BugMeNot</a></p>

</div>
<p>Last Modified: 2 April 2024<br>
add js function in README<br>
<pre></pre>
</p>

<script id='jsgiscus'
  src='https://giscus.app/client.js'
  data-repo="torappinfo/uweb"
  data-repo-id="MDEwOlJlcG9zaXRvcnkzMDIyMDU3MjE="
  data-category="Announcements"
  data-category-id="DIC_kwDOEgNLGc4CQjsh"
  data-mapping="title"
  data-strict="0"
  data-reactions-enabled="1"
  data-emit-metadata="0"
  data-input-position="top"
  data-theme="light"
  data-lang="en"
  data-loading="lazy"
  crossorigin="anonymous" async>
</script>

    <footer class="site-footer">
      <div class="container">
        &copy; 2018-2025 Richard H. Cao
      </div>
    </footer>
    <!-- This document is licensed under the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at <https://www.gnu.org/licenses/>. -->


  </body>
</html>
